#include <stdio.h>
#define MaxSize 100

typedef struct{
	char vex[MaxSize];
	int Edge[MaxSize][MaxSize];
	int nume,numv; 
}Graph;

int visit[MaxSize];

void creat_group(Graph* G)
{
	int x,y;
	scanf("%d %d",&G->numv,&G->nume);
	getchar();

	for(int i=0;i<G->numv;i++){
		scanf("%c",&G->vex[i]);
	}
	for(int i=0;i<G->numv;i++){
		for(int j=0;j<G->numv;j++){
			G->Edge[i][j]=0;
		}
	}
	for(int i=0;i<G->nume;i++){
		scanf("%d %d",&x,&y);
		G->Edge[x][y]=1;
		G->Edge[y][x]=1;
	}
}

void DFS(Graph G,int i)
{
	printf("%c ",G.vex[i]);
	for(int j=0;j<G.numv;j++){
		if(visit[j]==0 && G.Edge[i][j]==1){
			visit[j]=1;
			DFS(G,j);
		}
	}
	
}

int main(void)
{
	Graph G;
	creat_group(&G);
	for(int i=0;i<G.numv;i++)
	{
		if(visit[i]==0){
			visit[i]=1;
			DFS(G,i);
		}
	}
	return 0;
}
